// JavaScript Document
function getStyle(obj,sty){
	var value;//设置变量
	if(obj.currentStyle){//兼容性处理，获得值
		value=obj.currentStyle[sty]
		}
	else{//兼容性处理，两种方法都是为了取得值
		value=window.getComputedStyle(obj,null)[sty]
		}
	if(sty=='opacity'){//若为opacity属性则需要对这个值乘以100
		return Math.round(parseFloat(value)*100)
		}
		else{//若是常规的属性 ，则直接返回这个值
			return parseInt(value)
			}
}

function move(obj,josn,beishu,fn){
	clearInterval(obj.timer)//若这个对象有定时器属性值，则清空这个属性，一面产生重复的定时器效果
	
	
	obj.timer=setInterval(function(){//对这个对象设置定时器属性
		var jishu=0;
		for(var sty in josn){//这个是传进来的一个对象，包含有多个属性值，属性为对象的style属性，值为所需要设定的值
		num=josn[sty];//遍历这个josn对象，获得某个属性的属性值
		if(!beishu){//若函数没有传速度参数，则速度参数默认为10
			beishu=10
			}
		var current=getStyle(obj,sty);//通过获得属性的函数，后的需要设置的属性的值
		
		
		var speed=((num-current)/1000)*beishu; 
		//设定速度，也就是每次移动的值的变化大小
		if(speed>0){speed=Math.ceil(speed)}//因为速度的值是变化的，所以到最后，可能这个值可能小于1像素，所以就没办法移动，所以需要设置。如果小于零则向上取整为1
		else{speed=Math.floor(speed)}//如果速度为负数，就向下取整
		
		if(current!=num){//判断。如果获得的值与我们需要设定的值不同，也就是说移动的结果没有达到我们设定的效果，则执行函数
			if(sty=='opacity'){//如果设定的是opacity属性，则我们需要吧这个属性值除以100，以为opacity的属性值取值范围为0-1
				obj.style[sty]=(current+speed)/100
				}
			else{
			obj.style[sty]=current+speed+'px'//若是常规的属性，则改变此对象的这个属性，（原来属性值加上speed）
			}
			jishu++;//设定一个计数器，如果这一步执行了，就证明了有一些属性还没有达到设定的值，就加一，然后就继续循环执行
			}
		}
		if(jishu==0){//如果jishu变量还是初始值0，则说明了，所有的属性值都已经达到我们设定的值了，说明函数已经何以结束了
		
				clearInterval(obj.timer);//那么这个时候就清除这个对象的定时器属性
				if(fn){//如果这个对象有回调函数，就执行回调函数
					fn();
					}
				}
		},10)
	}